package tp1test

import org.scalatest.matchers.ShouldMatchers
import org.scalatest.FlatSpec
import tp1._
import scala.collection.mutable.ArrayBuffer
import java.util.GregorianCalendar
import recursos._

class Tests extends FlatSpec with ShouldMatchers{
	var carreraTPI = new Carrera("TPI")
	var docente = new Docente("Alberto", "Guevara", carreraTPI) 
    val materia = new Materia("Objetos 3")
	val materia2 = new Materia("Objetos 2")
	val materia3 = new Materia("Intro")
	var alumno = new Alumno("Juan","Chiscosu", carreraTPI)
	var alumno1 = new Alumno("Teo","Doro", carreraTPI)
	var alumno2 = new Alumno("Armando","Barreda", carreraTPI)
    var docentes = new ArrayBuffer[Persona]()
    docentes += docente
    /* Aulas */
	var aula1 = new Aula(50,new ArrayBuffer[Recurso])
    var pizarron = new Pizarron(15)
    aula1.agregarRecurso(pizarron)
    var aula2 = new Aula(25,new ArrayBuffer[Recurso])
	aula2.agregarRecurso(new Canion(35))
    /* Actividades */
	var charla = new Charla(docente,new GregorianCalendar(2013,5,5),new GregorianCalendar(2013,5,5), "Charla Scala",  1500, 13, 19, 35)
	var seminario = new Seminario (docente,new GregorianCalendar(2013,5,5),new GregorianCalendar(2013,5,5),"Seminario Xtent",1900)
	var charla2 = new Charla(docente,new GregorianCalendar(2013,5,5),new GregorianCalendar(2013,6,5), "Charla ScalaTalks",  1500, 20, 22, 35)
	var experimento = new Experimento(new GregorianCalendar(2013,5,5), 10, 13,"Linearizacion en Scala")
	var experimento1 = new Experimento(new GregorianCalendar(2013,5,7), 12, 16,"Herencia multiple")
	var exps = new ArrayBuffer[Experimento]()
	exps += experimento
	exps += experimento1
	var resultados = ArrayBuffer[(String,GregorianCalendar)]()
	var tuple = ("Todo en orden",new GregorianCalendar(2013,5,1))
	resultados += tuple
	tuple = ("Articulo sobre paradigmas",new GregorianCalendar(2013,5,2))
	resultados += tuple
	var proyecto = new Proyecto(docente,new GregorianCalendar(2013,5,5),new GregorianCalendar(2013,6,5), "Charla ScalaTalks",  2300)
	proyecto.experimentos = exps
	proyecto.resultados = resultados
	var integrantes = new ArrayBuffer[Persona]()
	integrantes += alumno
	integrantes += alumno1
	integrantes += alumno2
	integrantes += docente
	proyecto.integrantes = integrantes
	var actividades = new ArrayBuffer[Actividad]()
	actividades += charla
	actividades += charla2
	actividades += seminario
	actividades += proyecto
	var grupo = new Grupo(3)
	grupo.integrantes = integrantes
	grupo.actividades = actividades
	
	
	/* Agrego elementos a las instancias */
	charla.agregarRecurso(pizarron)
	seminario.agregarRecurso(new Pizarron(8))
	seminario.agregarRecurso(new Canion(35))
	
    materia.agregarCurso(2013, 1,10, docentes,4,18, 22,new GregorianCalendar(2013, 3, 4),new GregorianCalendar(2013, 5, 4))
    materia.dameCursos.head.agregarRecurso(pizarron)
    materia2.agregarCurso(2013,1,10, docentes,6, 13, 15,new GregorianCalendar(2013, 3, 4),new GregorianCalendar(2013, 5, 7))
    materia2.dameCursos.head.agregarRecurso(new AireAcondicionado(2500,true,false))
    materia2.dameCursos.head.agregarRecurso(new Pizarron(18))
    carreraTPI.agregarMateria(materia)
    carreraTPI.agregarMateria(materia2)
    carreraTPI.agregarMateria(materia3)
    carreraTPI.darDeAltaA(alumno)
    materia.inscribirAlumno(alumno)
    materia2.inscribirAlumno(alumno)
    materia.ponerNotaAAlumno(alumno, 5)
    materia.cerrarCursos(2013, 1)
    materia2.cerrarCursos(2013, 1)
    
    /* Testeo */
    alumno.cargarTodasLasNotas
    alumno.cantCursosAbandonados should be (1)
    alumno.cantCursosAprobados should be (1)
    alumno.cursosRealizados should be (1,1)
    alumno.notaMasAltaNVeces(1) should be (5)
    alumno.promedioSinAplazos should be (5)
	alumno.a_materias.size should be (2)
    alumno.promedioConAplazos should be (5)
    //alumno.TablaDeNotas
	carreraTPI.cargarTodasLasNotas
    carreraTPI.promedioConAplazos should be (5)
    carreraTPI.promedioSinAplazos should be (5)
    //println(carreraTPI.TablaDeNotas)
	docente.cargarTodasLasNotas
    docente.promedioConAplazos should be (5)
    docente.promedioSinAplazos should be (5)
	docente.corteAnual(2014)
	docente.promedioConAplazos should be (0)
    docente.promedioSinAplazos should be (0)
    //println(docente.TablaDeNotas)
	materia.cargarTodasLasNotas
    materia.promedioConAplazos should be (5)
    materia.promedioSinAplazos should be (5)
    //println(materia.TablaDeNotas)
	materia.dameCursos.head.cargarTodasLasNotas
    materia.dameCursos.head.promedioConAplazos should be (5)
    materia.dameCursos.head.promedioSinAplazos should be (5)
    //materia.dameCursos.head.TablaDeNotas
	alumno.corteAnual(2013)
    alumno.cantCursosAbandonados should be (1)
    alumno.cantCursosAprobados should be (1)
    alumno.cursosRealizados should be (1,1)
    alumno.notaMasAltaNVeces(1) should be (5)
    alumno.promedioSinAplazos should be (5)
    alumno.promedioConAplazos should be (5)
	
    materia.dameCursos.head.meSirveAula(aula1) should be (true)
	materia2.dameCursos.head.meSirveAula(aula2) should be (false)
	materia2.dameCursos.head.meSirveAula(aula1) should be (false)
    
    charla.meSirveAula(aula1) should be (true)
    charla.meSirveAula(aula2) should be(false)
    seminario.meSirveAula(aula1) should be (false)
    seminario.meSirveAula(aula2) should be (false)
	
	var esperado = new ArrayBuffer[Actividad]()
	esperado += charla2
//	grupo.actividadesPendientesDeAprobacion() should be (esperado)
//	
//	var esperado2 = new ArrayBuffer[String,GregorianCalendar]()
//    esperado2 += ("Articulo sobre paradigmas",new GregorianCalendar(2013,5,2))
//    grupo.articulosPublicadosConFecha() should be (esperado2)
//	
//	var esperado3 = new ArrayBuffer[String]()
//	esperado3 += "(2013,5,5) 13 19 Charla sobre Scala"
//	esperado3 += "(2013,5,5) 20 22 Charla sobre ScalaTalks"
//	esperado3 += "(2013,5,5) 10 13 Linearizacion en Scala"
//	esperado3 += "(2013,5,7) 12 16 Herencia Multiple"
//	
//	grupo.agendaDeEventosDe(docente) should be (esperado3)
	
}